#!/usr/bin/env bats   -*- bats -*-
#
# FIXME: short description of the purpose of this module
#
# FIXME: copy this file to 'NNN-yourtestname.bats' and edit as needed.
#

load helpers

@test "ramalama subcmd - description of this particular test" {
    args="some sort of argument list"
    run_ramalama subcmd $args
    assert "$output" == "what we expect"   "output from 'ramalama subcmd $args'"
}

# vim: filetype=sh

###############################################################################
#
# FIXME FIXME FIXME: Most of the time you can cut from here on down.
# FIXME FIXME FIXME: The above template is probably enough for many tests.
# FIXME FIXME FIXME:
# FIXME FIXME FIXME: If you need anything more complicated, read on.
#
# FIXME: This is a bloated test template. It provides mostly stuff for you
# FIXME: to remove, plus stuff for you to base your tests on.
# FIXME:
# FIXME: copy this file to 'NNN-yourtestname.bats' and edit as needed.
# FIXME: Read all FIXMEs, act on them as needed, then remove them.
# FIXME: test w/ $ RAMALAMA=./bin/ramalama bats test/system/NNN-yourtestname.bats
#

load helpers

# FIXME: DELETE THESE LINES UNLESS YOU ABSOLUTELY NEED THEM.
# FIXME: Most tests will not need a custom setup/teardown: they are
# FIXME: provided by helpers.bash.
# FIXME: But if you have to do anything special, these give you the
# FIXME: names of the standard setup/teardown so you can call them
# FIXME: before or after your own additions.
function setup() {
    basic_setup
    # FIXME: you almost certainly want to do your own setup _after_ basic.
}
function teardown() {
    # FIXME: you almost certainly want to do your own teardown _before_ basic.
    basic_teardown
}


# FIXME: very basic one-pass example
@test "ramalama FOO - description of test" {
    # FIXME: template for run commands. Always use 'run_ramalama'!
    # FIXME: The '?' means 'ignore exit status'; use a number if you
    # FIXME:    expect a precise nonzero code, or omit for 0 (usual case).
    # FIXME: NEVER EVER RUN 'ramalama' DIRECTLY. See helpers.bash for why.
    run_ramalama '?' serve -d $MODEL; echo READY'
    cid="$output"
    wait_for_ready $cid

    run_ramalama logs $cid
    # FIXME: example of dprint. This will trigger if RAMALAMA_TEST_DEBUG=FOO
    # FIXME:  ...or anything that matches the name assigned in the @test line.
    dprint "ramalama logs $cid -> '$output'"
    assert "$output" == "what are we expecting?" "description of this check"

    # Clean up
#FIXME    run_ramalama rm $cid
}


# FIXME: another example, this time with a test table loop
@test "ramalama FOO - json - template for playing with json output" {
    # FIXME: Define a multiline string in tabular form, using '|' as separator.
    # FIXME: Each row defines one test. Each column (there may be as many as
    # FIXME: you want) is one field. In the case below we have two, a
    # FIXME: json field descriptor and an expected value.
    tests="
id        | [0-9a-f]\\\{64\\\}
created   | [0-9-]\\\+T[0-9:]\\\+\\\.[0-9]\\\+Z
size      | -\\\?[0-9]\\\+
"

    # FIXME: parse_table is what does all the work, giving us test cases.
    while read field expect; do
        # FIXME: this shows a drawback of BATS and bash: we can't include '|'
        # FIXME: in the table, but we need to because some images don't
        # FIXME: have a CID. So, yeah, this is ugly -- but rare.
        if [ "$field" = "id" ]; then expect="$expect\|<missing>";fi

        # output is an array of dicts; check each one
        count=$(echo "$output" | jq '. | length')
        i=0
        while [ $i -lt $count ]; do
            actual=$(echo "$output" | jq -r ".[$i].$field")
            # FIXME: please be sure to note the third field!
            # FIXME: that's the test name. Make it something useful! Include
            # FIXME: loop variables whenever possible. Don't just say "my test"
            assert "$actual" =~ "$expect\$"    "jq .[$i].$field"
            i=$(expr $i + 1)
        done
    done < <(parse_table "$tests")
}


# vim: filetype=sh
